import { getToken, setToken, removeToken, setTimeStamp } from '@/utils/auth'
import { login, getUserInfo, getUserDetailById } from '@/api/user'
// vuex的状态
const state = {
  token: getToken(),
  userInfo: {}
}
// 修改vuex状态的方法
const mutations = {
  // mutations的修改方法，主要是修改state数据
  setToken(state, token) {
    // 1.修改vuex里面的token
    state.token = token
    // 2.修改缓存的token
    setToken(token)
  },
  // mutations的修改方法，主要是修改state数据
  removeToken() {
    // 1.修改vuex里面的token
    state.token = null
    // 2.修改缓存的token
    removeToken()
  },
  setUserInfo(state, result) {
    state.userInfo = result
  },
  removeUserInfo(state) {
    state.userInfo = {}
  }

}
// 异步修改vuex的方法，会调用mutations
const actions = {
  // actions定义调用接口的方法,这个方法是给页面调用提供的
  async login(store, data) {
    // 调用api
    const res = await login(data)
    // 调用mutations的setToken方法进行存储
    store.commit('setToken', res)
    // 设置时间戳
    setTimeStamp(Date.now())
  },
  logout(store) {
    // 清空token
    store.commit('removeToken')
    // 清空用户资料
    store.commit('removeUserInfo')
  },
  async getUserInfo(store) {
    const result = await getUserInfo()
    const data = await getUserDetailById(result.userId)
    store.commit('setUserInfo', { ...result, ...data })
    // 给权限控制预留
    return result
  }

}
export default {
  namespaced: true,
  state,
  mutations,
  actions
}

